/**
 * 用户旅程测试 - 串联注册、登录和购物车场景
 * 模拟用户完整体验流程：注册 -> 登录 -> 浏览商品 -> 添加购物车
 */

import { defineAITest } from '../core/define-test';
import { runTest } from '../engine';
import { Midscene } from '../ai/midscene';
import { generateActionsFromPrompt } from '../ai/langchain-parser';

async function main() {
  // 生成随机邮箱，确保每次测试使用不同的账户
  const randomEmail = `test_${Date.now()}@example.com`;
  const password = 'Test@123456';
  
  // 1. 定义注册测试用例
  const signupTestDefinition = {
    scenario: "用户注册流程",
    prompt: `访问首页，点击注册按钮，填写邮箱(${randomEmail})和密码(${password})，提交表单，验证成功跳转到个人中心页面`,
    baseUrl: "http://localhost:3000",
    timeout: 15000,
    config: {
      headless: false
    }
  };

  // 2. 定义登录测试用例
  const loginTestDefinition = {
    scenario: "用户登录流程",
    prompt: `使用刚才注册的邮箱(${randomEmail})和密码(${password})登录，验证成功跳转到个人中心页面`,
    baseUrl: "http://localhost:3000",
    timeout: 15000,
    config: {
      headless: false
    }
  };

  // 3. 定义购物车测试用例
  const cartTestDefinition = {
    scenario: "购物车功能验证",
    prompt: "从个人中心页面导航到商品列表页面，等待.product元素加载完成，然后点击第一个商品的'加入购物车'按钮，最后验证购物车计数增加",
    baseUrl: "http://localhost:3000/dashboard",
    timeout: 15000,
    config: {
      headless: false
    }
  };

  console.log('开始执行用户旅程测试...');
  
  try {
    // 执行注册测试
    console.log('步骤1: 执行用户注册测试');
    const signupTestId = await defineAITest(signupTestDefinition);
    const midscene = Midscene.getInstance();
    const fullSignupTest = midscene.getTest(signupTestId);
    
    if (!fullSignupTest) {
      throw new Error(`未找到注册测试用例: ${signupTestId}`);
    }
    
    const signupResult = await runTest(fullSignupTest);
    console.log('注册测试结果:', signupResult);
    
    if (!signupResult.success) {
      throw new Error('注册测试失败，终止后续测试');
    }
    
    // 执行登录测试
    console.log('步骤2: 执行用户登录测试');
    const loginTestId = await defineAITest(loginTestDefinition);
    const fullLoginTest = midscene.getTest(loginTestId);
    
    if (!fullLoginTest) {
      throw new Error(`未找到登录测试用例: ${loginTestId}`);
    }
    
    const loginResult = await runTest(fullLoginTest);
    console.log('登录测试结果:', loginResult);
    
    if (!loginResult.success) {
      throw new Error('登录测试失败，终止后续测试');
    }
    
    // 执行购物车测试
    console.log('步骤3: 执行购物车功能测试');
    const cartTestId = await defineAITest(cartTestDefinition);
    const fullCartTest = midscene.getTest(cartTestId);
    
    if (!fullCartTest) {
      throw new Error(`未找到购物车测试用例: ${cartTestId}`);
    }
    
    const cartResult = await runTest(fullCartTest);
    console.log('购物车测试结果:', cartResult);
    
    // 输出最终结果
    console.log('用户旅程测试完成!');
    console.log('总体结果:', {
      注册: signupResult.success ? '成功' : '失败',
      登录: loginResult.success ? '成功' : '失败',
      购物车: cartResult.success ? '成功' : '失败',
      总体: signupResult.success && loginResult.success && cartResult.success ? '成功' : '失败'
    });
    
  } catch (error) {
    console.error('用户旅程测试执行失败:', error);
  }
}

// 运行测试
main().catch(console.error);